package framework;

import org.openqa.selenium.By;

import framework.elements.Label;

/**
 * Абстрактный класс, описывающий базовую форму (страницу) приложения
 */
abstract public class BaseForm extends BaseEntity {
    
    /** локатор элемента, по которому определяется открытие формы/*/
    private By titleLocator; 
    // заголовок формы, например, "Логин"
    private String title;        
    
    /**
     * Основной конструктор
     * @param titleLocator Локатор заголовка формы
     * @param title Имя формы
     */
    protected BaseForm(final By titleLocator, final String title) {
        init(titleLocator, title);
        assertIsOpen();
    }

    protected String formatLogMsg(String message) {
        return message;
    }

    /**
     * Инициализация полей класса значениями, переданными в конструктор
     */
    private void init(final By titleLocator, final String title) {
        this.titleLocator = titleLocator;
        this.title = title;
    }

    /**
     * Проверка открытия формы
     * Если форма не открыта, тест прекращает свою работу
     */
    public void assertIsOpen() {
        //Check that Chrome doesn't throw 500 error
        if (browser.getDriver().getPageSource().contains(
                "HTTP Error")) {
            fatal(String.format(
                    "HTTP Error has occurred while opening form '%1$s",
                    this.title));
        }
        Label elem = new Label(titleLocator, title);
        try {
            elem.waitAndAssertIsPresent(browser.getTimeoutForPageLoadLong());
            info(String.format("Form '%1$s' appears", this.title));
        } catch (Throwable e) {
            fatal(String.format("Form '%1$s' doesn't appear", this.title));
        }
    }
}
